var express = require("express")
var path = require("path")
var fs = require("fs")
var bodyParser = require("body-parser")

//创建express实例
var app = express();

//设置静态资源托管
app.use( express.static("./static") )

//后台可以提前定义的接口类型(路由类型) 可以是 get/post/put/delete/options/... 等类型
//get类型的接口 用来处理查询( 一般不带参数 )
//post类型的接口 用来处理增加/删除/编辑

//如果后台程序定义的接口类型是 get , 那么前端浏览器发网络请求时 必须用 get 类型来发请求;
//如果后台程序定义的接口类型是 post , 那么前端浏览器发网络请求时 必须用 post 类型来发请求;

//如果前端发起的请求的类型和请求的地址 和 后台程序的 路由类型,路由地址 都一致, 才说明匹配成功, 后台程序可以处理. 否则 请求失败(后台接收不到请求).

//设置一个中间件,处理post请求的参数
// app.use(bodyParser())

app.use( (req,res,next)=>{
    //req, 请求对象
    //res, 想要对象
    //next, 执行下一个中间件( 将请求传递给下一个中间件 )

    //可以在这个地方, 验证请求参数
    //还可以在这个地方 , 处理错误
    console.log(" 我们自己写的中间件1 执行了");
    next();//将请求传递给下一个中间件 
} )

app.use( (req,res,next)=>{
    //req, 请求对象
    //res, 想要对象
    //next, 执行下一个中间件( 将请求传递给下一个中间件 )

    //可以在这个地方, 验证请求参数
    //还可以在这个地方 , 处理错误
    console.log(" 我们自己写的中间件2 执行了");
    next();//将请求传递给下一个中间件 
} )

app.use( bodyParser()  )

//处理 添加用户 请求
app.post("/api/add",(req,res)=>{
    //req 请求对象
    //res 响应对象
    console.log("添加请求来了");
    //接收get类型的请求参数
    //var params = req.query; 

    //接收post类型的请求参数
    var params = req.body;

    var pathname = path.join(__dirname,"./static/data.json");
    if( fs.existsSync(pathname) )
    {
        //获取json文件的内容
        var userlist = JSON.parse( fs.readFileSync(pathname,'utf-8') );
        //添加用户到userlist
        params.id = userlist.length + 1;
        userlist.push( params );
        //写入到文件
        fs.writeFileSync( pathname, JSON.stringify( userlist ) );
        
        //返回最新的用户列表
        res.send( { code:200, userlist: userlist, msg:"查询成功!" } );
    }
})

//处理 删除用户 请求
app.post("/api/delete",(req,res)=>{
    //获取请求参数(id)
    var params = req.body;
    console.log( params );

    //读取json文件中的用户列表
    var pathname = path.join(__dirname,"./static/data.json");
    if( fs.existsSync(pathname) )
    {
        //获取json文件的内容
        var userlist = JSON.parse( fs.readFileSync(pathname,'utf-8') );

        //查找该id对应的用户, 找到他 删除这个id用户
        var i = userlist.findIndex((item)=>{
            return item.id == params.id;
        })
        if( i != -1){
            userlist.splice(i,1);
        }
        //再次把最新的用户列表写入文件
        fs.writeFileSync( pathname, JSON.stringify( userlist ) );
        
        //返回最新的用户列表到浏览器
        res.send( { code:200, userlist: userlist, msg:"查询成功!" } );
    }
    
})

//处理 编辑用户 请求
app.get("/api/edit",(req,res)=>{
    //获取请求参数(新的用户数据, id, email,phone,name )
    var params = req.query;

    //读取json文件中的用户列表
    //读取json文件中的用户列表
    var pathname = path.join(__dirname,"./static/data.json");
    if( fs.existsSync(pathname) )
    {
        //获取json文件的内容
        var userlist = JSON.parse( fs.readFileSync(pathname,'utf-8') );

        //查找该id对应的用户, 找到他 替换这个id用户
        var i = userlist.findIndex((item)=>{
            return item.id == params.id;
        })
        if( i != -1){
            userlist.splice(i,1,params);
        }

        //再次把最新的用户列表写入文件
        fs.writeFileSync( pathname, JSON.stringify( userlist ) );
        //返回最新的用户列表到浏览器
        res.send( { code:200, userlist: userlist, msg:"查询成功!" } );
    }

})

//处理 查询用户 请求
app.get("/api/list",(req,res)=>{
    //req 请求对象
    //res 响应对象

    //拼接json文件路径
    var pathname = path.join(__dirname,"./static/data.json");
    if( fs.existsSync(pathname) )
    {
        var data = JSON.parse( fs.readFileSync(pathname,'utf-8') );
        res.send( { code:200, userlist: data, msg:"查询成功!" } );
    }
})

//处理 查询用户 请求, 分页处理(每次只返回10个用户)
app.get("/api/list2",(req,res)=>{
    //req 请求对象
    var { page } = req.query;
    //res 响应对象

    //取对应页码的10个用户数据
    //page是1, 返回 1-10 的用户数据
    //page是2, 返回 11-20 的用户数据
    //page是3, 返回 21-30 的用户数据
    //page是n, 返回 (n-1)*10+1 - n*10 的用户数据

    //拼接json文件路径
    var pathname = path.join(__dirname,"./static/data.json");
    if( fs.existsSync(pathname) )
    {
        var data = JSON.parse( fs.readFileSync(pathname,'utf-8') );
        var selecteddata = data.slice( (page-1)*10 , page*10 );
        res.send( { code:200, total: data.length, userlist: selecteddata, msg:"查询成功!" } );
    }
})

//处理 单个用户查询 请求
app.get("/api/user/:id",(req,res)=>{
    var {id} = req.params;
    
    //读取json文件中的用户列表
    var pathname = path.join(__dirname,"./static/data.json");
    if( fs.existsSync(pathname) )
    {
        //获取json文件的内容
        var userlist = JSON.parse( fs.readFileSync(pathname,'utf-8') );

        //查找该id对应的用户, 找到他 替换这个id用户
        var i = userlist.findIndex((item)=>{
            return item.id == id;
        })
        if( i != -1){
            
            //返回最新的用户列表到浏览器
            res.send( { code:200, user: userlist[i], msg:"查询成功!" } );
            
        }

    }
})

app.listen(9000,()=>{
    console.log("服务端程序运行在 http://localhost:9000 ");
})